热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

伸缩性|本文_ElasticSearch基本操作

篇首语:本文由编程笔记#小编为大家整理,主要介绍了ElasticSearch基本操作相关的知识,希望对你有一定的参考价值。文章目录

篇首语:本文由编程笔记#小编为大家整理,主要介绍了ElasticSearch基本操作相关的知识,希望对你有一定的参考价值。



文章目录


  • 1.ElasticSearch 简介
  • 2.索引库操作
    • 2.1.mapping 属性
    • 2.2.索引库CRUD

  • 3.文档操作
    • 3.1.新增文档
    • 3.2查询文档
    • 3.3删除文档
    • 3.4修改文档

  • 4.RestClient
    • 4.1准备工作
    • 4.2.RestClient操作索引库
    • 4.3.RestClient操作文档



1.ElasticSearch 简介

Elasticsearch 是一个分布式、高扩展、高实时的搜索与数据分析引擎。它能很方便的使大量数据具有搜索、分析和探索的能力。可以帮助我们从海量数据中快速找到需要的内容。充分利用Elasticsearch的水平伸缩性,能使数据在生产环境变得更有价值。Elasticsearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java语言开发的。

概念对比


mysqlElasticsearch说明
TableIndex索引(index),就是文档的集合,类似数据库的表(table)
RowDocument文档(Document),就是一条条的数据,类似数据库中的行(Row),文档都是JSON格式
ColumnField字段(Field),就是JSON文档中的字段,类似数据库中的列(Column)
SchemaMapping映射(Mapping)是索引中文档的约束,例如字段类型约束。类似数据库的表结构
SQLDSLDSL是elasticsearch提供的JSON风格的请求语句,用来操作elasticsearch,实现CRUD

优点对比


  • Mysql:擅长事务类型操作,可以确保数据的安全和一致性
  • Elasticsearch:擅长海量数据的搜索、分析、计算

2.索引库操作

2.1.mapping 属性

mapping 是对索引库中文档的约束,常见的mapping属性包括


  • type:字段类型
    • 字符串:text(可分词的文本)、keyword(精确值,不可拆分的词)
    • 数值:long、integer、short、byte 、double、float
    • 布尔:boolean
    • 日期:date
    • 对象:object
  • index:是否创建倒排索引,默认为true
  • analyzer:使用哪种分词器,一般与text联合使用
  • properties:该字段的子字段

更多mapping属性可查阅Elastic官方文档


2.2.索引库CRUD

创建索引库

【语法】

PUT /索引库名

"mappings":
"properties":
"字段名1":
"type": "text",
"analyzer": "ik_smart"
,
"字段名2":
"type": "object",
"properties":
"子字段":
"type": "keyword"


,
//....



【案例】

查询索引库

【语法】

GET /索引库名

【案例】

GET /why

删除索引库

【语法】

DELETE /索引库名

【案例】

DELETE /why

修改索引库

索引库只能添加新的字段,索引库一旦创建就无法修改

【案例】

PUT /索引库名/_mapping

properties:
"新的字段名":
"type": "integer"



【案例】


3.文档操作

3.1.新增文档

【语法】

POST /索引库名称/_doc/文档id

"字段1": "值1",
"字段2": "值2",
"字段3":
"子属性1": "值3",
"子属性2": "值4"
,
//...

【案例】


3.2查询文档

【语法】

GET /索引库/_doc/文档id

【案例】

GET /why/_doc/1

3.3删除文档

【语法】

DELETE /索引库/_doc/文档id

【案例】

DELETE /why/_doc/1

3.4修改文档

【全量修改语法】

PUT /索引库名/_doc/文档id

"字段1": "值1",
"字段1": "值1",
//...

【增量修改语法】

POST /索引库名/_update/文档id

"doc":
"字段名" :"新的值"


【案例】

两种修改方式的区别


  • 全量修改:这种方式会删除旧的文档,如果id存在就修改文档,如果id不存在就新增文档
  • 增量修改:这种方式只修改某个字段,如果id存在就修改字段,如果id不存在报404

4.RestClient

官方文档地址



4.1准备工作

一、导入工程和数据库



本文素材来自黑马张老师的视频


二、引入依赖

<properties>
<java.version>1.8java.version>

<elasticsearch.version>7.12.1elasticsearch.version>
properties>

<dependency>
<groupId>org.elasticsearch.clientgroupId>
<artifactId>elasticsearch-rest-high-level-clientartifactId>
<version>7.12.1version>
dependency>
dependencies>

三、初始化JavaRestClient

private RestHighLevelClient client;
&#64;BeforeEach //初始化RestHighLevelClient
void init()
this.client &#61; new RestHighLevelClient(RestClient.builder(
HttpHost.create("http://192.168.140.130:9200")
));

&#64;AfterEach //关闭资源
void close() throws IOException
this.client.close();


4.2.RestClient操作索引库

创建索引库

&#64;Test //创建索引库
void testCreateHotelIndex() throws IOException
//1.创建Request对象
CreateIndexRequest request &#61; new CreateIndexRequest("hotel");
//2.请求参数 source&#xff1a;创建索引库的DSL语句&#xff0c;xContentType&#xff1a;数据类型
request.source(MAPPINF_TEMPLATE,XContentType.JSON);
//3.发送请求,创建索引库
client.indices().create(request, RequestOptions.DEFAULT);

判断索引库是否存在

&#64;Test //判断索引库是否存在
void testIsExistHotelIndex() throws IOException
//1.创建Request对象 参数是要删除索引库的名称
GetIndexRequest request &#61; new GetIndexRequest("hotel");
//3.发送请求,判断索引库是否存在
boolean exists &#61; client.indices().exists(request, RequestOptions.DEFAULT);
System.out.println("索引库是否存在&#xff1a;"&#43;exists);

删除索引库

&#64;Test //删除索引库
void testDeleteHotelIndex() throws IOException
//1.创建Request对象 参数是要删除索引库的名称
DeleteIndexRequest request &#61; new DeleteIndexRequest("hotel");
//3.发送请求,删除索引库
client.indices().delete(request, RequestOptions.DEFAULT);


4.3.RestClient操作文档

添加文档

&#64;Test //添加文档
void testAddIndexDocument() throws IOException
//在数据库查找数据
Hotel hotel &#61; hotelService.getById(61083L);
//转化为文档类型
HotelDoc hotelDoc &#61; new HotelDoc(hotel);
//1.创建request对象
IndexRequest request &#61; new IndexRequest("hotel").id(hotel.getId().toString());
//2.准备document文档 将对象序列化成json格式的字符串
String source &#61; JSON.toJSONString(hotelDoc);
request.source(source,XContentType.JSON);
//3.发送请求,添加文档
client.index(request,RequestOptions.DEFAULT);

查询文档

&#64;Test //查找文档
void testGetIndexDocument() throws IOException
GetRequest request &#61; new GetRequest("hotel","61083");
GetResponse documentFields &#61; client.get(request, RequestOptions.DEFAULT);
String json &#61; documentFields.getSourceAsString();
//将json格式的字符串反序列化成对象
HotelDoc hotelDoc &#61; JSON.parseObject(json, HotelDoc.class);
System.err.println(hotelDoc);

更新文档

&#64;Test //这是局部更新文档,全量更新文档代码与添加文档相同
void testUpdateIndexDocument() throws IOException
UpdateRequest request &#61; new UpdateRequest("hotel","61083");
request.doc(
"price","999",
"score","50"
);
client.update(request,RequestOptions.DEFAULT);

删除文档

&#64;Test //删除文档
void deleteIndexDocument() throws IOException
DeleteRequest request &#61; new DeleteRequest("hotel","61083");
client.delete(request,RequestOptions.DEFAULT);

批量导入文档

&#64;Test //批量导入文档
void testMultipleAddIndexDocument() throws IOException
//从数据库中批量查询数据
List<Hotel> hotels &#61; hotelService.list();
BulkRequest request &#61; new BulkRequest();
for (Hotel hotel : hotels)
HotelDoc hotelDoc &#61; new HotelDoc(hotel);
request.add(new IndexRequest("hotel")
.id(hotelDoc.getId().toString())
.source(JSON.toJSONString(hotelDoc),XContentType.JSON));

client.bulk(request,RequestOptions.DEFAULT);


推荐阅读
  • Web开发框架概览:Java与JavaScript技术及框架综述
    Web开发涉及服务器端和客户端的协同工作。在服务器端,Java是一种优秀的编程语言,适用于构建各种功能模块,如通过Servlet实现特定服务。客户端则主要依赖HTML进行内容展示,同时借助JavaScript增强交互性和动态效果。此外,现代Web开发还广泛使用各种框架和库,如Spring Boot、React和Vue.js,以提高开发效率和应用性能。 ... [详细]
  • REST与RPC:选择哪种API架构风格?
    在探讨REST与RPC这两种API架构风格的选择时,本文首先介绍了RPC(远程过程调用)的概念。RPC允许客户端通过网络调用远程服务器上的函数或方法,从而实现分布式系统的功能调用。相比之下,REST(Representational State Transfer)则基于资源的交互模型,通过HTTP协议进行数据传输和操作。本文将详细分析两种架构风格的特点、适用场景及其优缺点,帮助开发者根据具体需求做出合适的选择。 ... [详细]
  • 本文推荐了六款高效的Java Web应用开发工具,并详细介绍了它们的实用功能。其中,分布式敏捷开发系统架构“zheng”项目,基于Spring、Spring MVC和MyBatis技术栈,提供了完整的分布式敏捷开发解决方案,支持快速构建高性能的企业级应用。此外,该工具还集成了多种中间件和服务,进一步提升了开发效率和系统的可维护性。 ... [详细]
  • 秒建一个后台管理系统?用这5个开源免费的Java项目就够了
    秒建一个后台管理系统?用这5个开源免费的Java项目就够了 ... [详细]
  • 本文深入探讨了NoSQL数据库的四大主要类型:键值对存储、文档存储、列式存储和图数据库。NoSQL(Not Only SQL)是指一系列非关系型数据库系统,它们不依赖于固定模式的数据存储方式,能够灵活处理大规模、高并发的数据需求。键值对存储适用于简单的数据结构;文档存储支持复杂的数据对象;列式存储优化了大数据量的读写性能;而图数据库则擅长处理复杂的关系网络。每种类型的NoSQL数据库都有其独特的优势和应用场景,本文将详细分析它们的特点及应用实例。 ... [详细]
  • MongoDB核心概念与基础知识解析
    MongoDB 是一种基于分布式文件存储的非关系型数据库系统,主要采用 C++ 语言开发。本文将详细介绍 MongoDB 的核心概念和基础知识,包括其与传统 SQL 数据库的区别,数据库及集合的基本操作,如数据的插入、更新、删除和查询等。通过本文,读者可以全面了解 MongoDB 的基本功能及其应用场景。 ... [详细]
  • 2016-2017学年《网络安全实战》第三次作业
    2016-2017学年《网络安全实战》第三次作业总结了教材中关于网络信息收集技术的内容。本章主要探讨了网络踩点、网络扫描和网络查点三个关键步骤。其中,网络踩点旨在通过公开渠道收集目标信息,为后续的安全测试奠定基础,而不涉及实际的入侵行为。 ... [详细]
  • 在前一篇文章《Hadoop》系列之“踽踽独行”(二)中,我们详细探讨了云计算的核心概念。本章将重点转向物联网技术,全面解析其基本原理、应用场景及未来发展前景。通过深入分析物联网的架构和技术栈,我们将揭示其在智能城市、工业自动化和智能家居等领域的广泛应用潜力。此外,还将讨论物联网面临的挑战,如数据安全和隐私保护等问题,并展望其在未来技术融合中的重要角色。 ... [详细]
  • REST API 时代落幕,GraphQL 持续引领未来
    尽管REST API已广泛使用多年,但在深入了解GraphQL及其解决的核心问题后,我深感其将引领未来的API设计趋势。GraphQL不仅提高了数据查询的效率,还增强了灵活性和性能,有望成为API开发的新标准。 ... [详细]
  • 您的数据库配置是否安全?DBSAT工具助您一臂之力!
    本文探讨了Oracle提供的免费工具DBSAT,该工具能够有效协助用户检测和优化数据库配置的安全性。通过全面的分析和报告,DBSAT帮助用户识别潜在的安全漏洞,并提供针对性的改进建议,确保数据库系统的稳定性和安全性。 ... [详细]
  • Python与R语言在功能和应用场景上各有优势。尽管R语言在统计分析和数据可视化方面具有更强的专业性,但Python作为一种通用编程语言,适用于更广泛的领域,包括Web开发、自动化脚本和机器学习等。对于初学者而言,Python的学习曲线更为平缓,上手更加容易。此外,Python拥有庞大的社区支持和丰富的第三方库,使其在实际应用中更具灵活性和扩展性。 ... [详细]
  • Ceph API微服务实现RBD块设备的高效创建与安全删除
    本文旨在实现Ceph块存储中RBD块设备的高效创建与安全删除功能。开发环境为CentOS 7,使用 IntelliJ IDEA 进行开发。首先介绍了 librbd 的基本概念及其在 Ceph 中的作用,随后详细描述了项目 Gradle 配置的优化过程,确保了开发环境的稳定性和兼容性。通过这一系列步骤,我们成功实现了 RBD 块设备的快速创建与安全删除,提升了系统的整体性能和可靠性。 ... [详细]
  • 本文深入探讨了ASP.NET Web API与RESTful架构的设计与实现。ASP.NET Web API 是一个强大的框架,能够简化HTTP服务的开发,使其能够广泛支持各种客户端设备。通过详细分析其核心原理和最佳实践,本文为开发者提供了构建高效、可扩展且易于维护的Web服务的指导。此外,还讨论了如何利用RESTful原则优化API设计,确保系统的灵活性和互操作性。 ... [详细]
  • 洞见RSAC|点击获取企业安全策略“工具包”
    为用户提供安全智 ... [详细]
  • php从哪里得到框架(2023年最新分享)
    导读:本篇文章编程笔记来给大家介绍有关php从哪里得到框架的相关内容,希望对大家有所帮助,一起来看看吧。本文目录一览:1、如何用PHP制 ... [详细]
author-avatar
ha遗忘的密
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有